#include "StdAfx.h"
#include "Carril.h"
#include <sstream>
using std::vector;

Carril::Carril(void)
{
}

Carril::~Carril(void)
{
}

vector<Punto*> Carril::getListaDePuntos()
{
	return listaDePuntos;
}

void Carril::setListaDePuntos(vector<Punto*> listPtos)
{
	this->listaDePuntos = listPtos;
}


void Carril::SetId(String valor){
	this->id = valor.tostring(valor.size());
}
String Carril::GetId(){
	return id;
}

string Carril::toString(){

	stringstream resultado;
	resultado << "Carril: " <<std::endl;
	
	for (int i=0; i < (int) this->listaDePuntos.size(); i++){

		Punto* puntoPtr  = this->listaDePuntos.at(i);
		resultado << "punto numero: " << i << " id: " << puntoPtr->GetId() <<std::endl;
	}

	return resultado.str();
}

void Carril::Dibujar(SDL_Surface *screen)
{
	double factorTramoSobrante=1.1;
	//double anchoCarril= this->getFondo()->getImagen()->h;	
	//double largoCarril= this->getFondo()->getImagen()->w;
				
	Punto* puntoActual  = this->listaDePuntos.at(0);
	 	for (int i=1; i < (int) this->listaDePuntos.size(); i++){
			Punto* puntoSiguiente  = this->listaDePuntos.at(i);

			Textura *texturaTMP=this->getFondo()->Clone();
			
			double deltaX = (puntoSiguiente->getPosX() - puntoActual->getPosX());
			double deltaY = (puntoSiguiente->getPosY() - puntoActual->getPosY());
			
			double largo= sqrt(pow(deltaX,2) + pow(deltaY,2));
		
	//		texturaTMP->cargar(largo, texturaTMP->getImagen()->h );

			texturaTMP->redimensionar(1, largo/texturaTMP->getImagen()->w);


			double angulo=0;
			SDL_Rect pos;
			angulo=(180*(atan2(deltaY,deltaX)))/M_PI;
			double angRad=atan2(deltaY,deltaX);

			texturaTMP->rotarDesdeOrigen(angRad);

			SDL_Rect rect;
			rect.x = puntoActual->posXRelAPantalla(screen->h,screen->w) - (texturaTMP->getImagen()->w/2); 
			rect.y = puntoActual->posYRelAPantalla(screen->h,screen->w) - (texturaTMP->getImagen()->h/2);

			SDL_SetColorKey(texturaTMP->getImagen(), SDL_SRCCOLORKEY|SDL_RLEACCEL, SDL_MapRGB(texturaTMP->getImagen()->format,0,0,0));

			SDL_BlitSurface(texturaTMP->getImagen(), 0, screen, &rect);
			puntoActual=puntoSiguiente;
		}
}

void Carril::CargarTextura(int resAnch){ 
	switch(resAnch){

	case 640:
		this->fondo->cargar();
		//this->fondo->redimensionar(0.7,1);
		break;
	case 800:
		this->fondo->cargar();
		//this->fondo->redimensionar(0.8,1);
		break;
	case 1024:
		this->fondo->cargar();
		//this->fondo->redimensionar(1.1,1);
		break;
	case 512:
		this->fondo->cargar(98,28);
		this->fondo->redimensionar(0.7,1);
		break;
	case 320:
		this->fondo->cargar(98,28);
		this->fondo->redimensionar(0.6,1);
		break;
	default:
		this->fondo->cargar(98,28);
		this->fondo->redimensionar(0.9,1);
		break;
	}
}